// interface Controllers{}

import type { AxiosRequestConfigExtendType } from '@/types'

export const usePageAjaxStore = defineStore(
  'pageAjaxStore',
  () => {
    const controllers: Map<string, AbortController>
      = new Map()

    /** ## 为当前请求添加控制器 */
    const addController = (
      config: AxiosRequestConfigExtendType,
    ) => {
      if (config.switchPageNotCancelRequest)
        return
      // 确保请求只会请求一次
      // if (config.url) {
      //   if (controllers.has(config.url)) {
      //     controllers.get(config.url)?.abort();
      //     controllers.delete(config.url);
      //   }
      // }
      // 添加控制器，用于切换页面取消请求
      const controller = new AbortController()
      config.signal = controller.signal
      controllers.set(config.url ?? uuid(), controller)
    }

    /** ## 取消跳转前页面的请求 */
    const abortAxios = () => {
      for (const controller of controllers.values()) {
        controller?.abort?.()
      }
      controllers.clear()
    }

    // const getKey = (
    //   config: AxiosRequestConfigExtendType
    // ) => {
    //   const s: string[] = [config.url!];
    //   if (config.method?.toLowerCase?.() === 'get') {
    //     if (config.params) {
    //       s.push(`?${objectToPathParams(config.params)}`);
    //     }
    //   } else {
    //   }
    // };
    return {
      controllers,
      addController,
      abortAxios,
    }
  },
)

function objectToPathParams(obj: Record<string, any>) {
  return Object.entries(obj)
    .map(([key, value]) => {
      // 对值进行适当的编码以确保其在 URL 中是合法的
      const encodedValue = encodeURIComponent(value)

      return `${encodeURIComponent(key)}=${encodedValue}`
    })
    .join('&')
}
